<?php
namespace app\apijson\parser;

use app\apijson\parser\AssocHelper;

class Parser
{
    public function parse(array $json, $parentData = [], $parentKey = null)
    {
        $result = [];
        foreach ($json as $key => $value) {
            if ($key === '[]') {
                $result['[]'] = $this->parse($value, $parentData, $key);
            } elseif ((($parentKey === null || $parentKey === '[]') && in_array($key, ['page', 'count', 'query']))) {
                // 根级或 [] 下的分页参数直接保留，不包装成 type=table
                $result[$key] = $value;
            } elseif ($this->isTable($key)) {
                // 允许根级直接是表名
                $result[$key] = [
                    'type' => 'table',
                    'params' => $value,
                    'parent' => $parentData,
                ];
            } elseif (AssocHelper::isAssoc($value)) {
                $result[$key] = $this->parse($value, $parentData, $key);
            } else {
                $result[$key] = $value;
            }
        }
        return $result;
    }

    protected function isTable($key)
    {
        // 支持全小写、首字母大写、下划线开头
        return preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $key);
    }
} 